Answer:

Registering a listener object establishes a channel of communication between the GUI object and the listener.

Registering the Listener

The container (a ButtonDemo2 object) can be registered as a listener for any of the components it contains. When a ButtonDemo2 object is constructed we will register it as an ActionListener for its own button.

class ButtonFrame extends JFrame implements ActionListener
{
  JButton bChange ;

  // constructor   
  public ButtonFrame() 
  {
    bChange = new JButton("Click Me!"); 
    getContentPane().setLayout( new FlowLayout() );  
    
    // register the ButtonFrame object as the listener for the JButton.
    bChange.addActionListener( this ); 
    
    getContentPane().add( bChange ); 
    setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );    
  }
   
  // listener method required by the interface
  public void  actionPerformed( ActionEvent evt)
  {
     . . . . . .
  }
}

Examine the statement:

bChange.addActionListener( this );

This statement is executed when a ButtonFrame object is constructed.

  1. bChange refers to the button.
  2. The button has a method that that registers a listener for its events: addActionListener()
  3. The listener is the ButtonFrame object.
    • The word this refers to the object being constructed, the frame.
  4. The statement tells the button, bChange, to run its method addActionListener() to register the frame (this) as a listener for button clicks.
  5. Now the frame is listening for actionEvents from the button.
  6. Events will be sent to the actionPerformed() method

You might think that the ButtonFrame frame should automatically be registered as the listener for all of the GUI components it contains. But this would eliminate the flexibility that is needed for more complicated GUI applications.

QUESTION 15:

You want the program to do something when the button is clicked. Where should the code to "do something" go?